var Postlist = {
    Init: {
        /** 管理中心: 初始化 */
        postList: function () {
            /**
             * 提示框中的a标签增加事件：
             * 对对应的文章进行提交分类的操作
             */
            $("body").on('click', '.postlist-cat', function () {
                var me = $(this);
                var artId = Postlist.Depot.popoverLstUseBtn.attr('data-artId');
                var catId = me.attr("data-mc-catId");
                var isAdd = me.hasClass("btn-gray");
                Postlist.submitCatByArtidHander(artId, catId, isAdd);
                me.toggleClass("btn-gray");
            });
            /**
             * 提示框显示完成后
             * 1. 回显该文章已经存在的分类
             */
            $('#postTab a[data-mc-category]').on('shown.bs.popover', function () {
                var me = $(this);
                var popoverLstUseBtn = Postlist.Depot.popoverLstUseBtn;
                var artId = me.attr("data-artId");
                if (popoverLstUseBtn) {
                    if (popoverLstUseBtn.attr("data-artId") != artId) {
                        popoverLstUseBtn.click();
                    }
                }
                Postlist.Depot.popoverLstUseBtn = me;
                Postlist.catsExistShow(artId);
            });
        }
    },
    Urls: {
        artCats: function (artId) {
            return "/auth/article/" + artId + "/cats"
        },
        catByArtId: function (artId, catId) {
            return "/auth/article/" + artId + "/cat/" + catId;
        }
    },
    Depot: {
        /** 该用户所有的分类列表 */
        cats: {},
        /** 所有分类列表所对应的map数据结构 */
        catsMap: {},
        /** 最后一次使用的提示框按钮对象 */
        popoverLstUseBtn: ""
    },
    Cache: {
        /** 缓存指定文章id的分类列表 */
        catsByArtIdMap: {}
    },
    /** 组装要显示的 所有分类列表在提示框中的html */
    category_ui: function (categorys) {
        var html = "<div data-mc-catsListWrap>"
        $.each(categorys, function (i, cat) {
            html += '<a class="btn btn-mod btn-gray btn-round postlist-cat" data-mc-catId="' + cat.id + '">' + cat.name + '</a>'
        });
        return html + "</div>";
    },
    /** 回显已经存在的分类列表 */
    catsExistShow: function (artId) {
        var cats = Postlist.Cache.catsByArtIdMap[artId];
        if (!!cats) {
            Postlist.catsExistHander(artId, cats);
            return;
        }
        $.ajax({
            url: Postlist.Urls.artCats(artId),
            type: "GET",
            dataType: 'json',
            success: function (res) {
                Comm.ajax.resultHander(res, function (code, msg, data) {
                    var map = {};
                    $.each(data, function (i, cat) {
                        map[cat.id] = [cat];
                    });
                    Postlist.Cache.catsByArtIdMap[artId] = map;
                    //处理回显
                    Postlist.catsExistHander(artId, map);
                }, null, null, null);
            },
            error: function (er) {
                Comm.ajax.errAlert(er);
            }
        });
    },
    /**
     * 处理已经存在的分类列表进行回显
     * @param artId 文章id
     * @param existCats 指定文章id已有的分类列表
     * @returns {string}
     */
    catsExistHander: function (artId, existCatsMap) {
        var $data = $("div[data-mc-catsListWrap] a")
        $.each($data, function (i, catA) {
            var catA = $(catA);
            var catId = catA.attr("data-mc-catId");
            if (existCatsMap[catId]) {
                catA.toggleClass("btn-gray");
            }
        });
    },
    /**
     * 提交分类结果
     * @param artId 文章id
     * @param catId 分类id
     * @param isAdd 是否增加？ true：增加，false 删除
     */
    submitCatByArtidHander: function (artId, catId, isAdd) {
        var cats = Postlist.Cache.catsByArtIdMap[artId];
        if (isAdd) {
            cats[catId] = Postlist.Depot.catsMap[catId];
        } else {
            delete cats[catId];
        }
        $.ajax({
            url: Postlist.Urls.catByArtId(artId, catId),
            type: "PUT",
            data: {
                isAdd: isAdd
            },
            dataType: 'json',
            success: function (res) {
                Comm.ajax.resultHander(res, function (code, msg, data) {
                    MrcodeUi.Alert.sx.success(data);
                }, null, null, null);
            },
            error: function (er) {
                Comm.ajax.errAlert(er);
            }
        });
    }
}

/**
 * 文章管理
 * Created by win on 2016/5/25 0025.
 */
$(function () {
    $("#postlist").addClass("active");
    fenye();
    initStatuNav();
});

/** tab切换样式 */
function initStatuNav() {
    var statu = $("#hi_statu").val();
    var $currentTab = $("#statu" + statu);
    $currentTab.addClass("active");
    $currentTab.siblings("li").removeClass("active");
}

/** 分页 */
function fenye() {
    $('nav[fenye="bootstrap"]').bindFanYeEvent(function (pageno) { //绑定点击翻页按钮的处理事件
        $("#hi_pageNo").val(pageno);
        $("#listFrom").submit();
    });
}


function getStatu() {
    return $("#hi_statu").val();
}

/**
 * 删除文章提示
 * @param me
 * @param articleId 文章id
 * @param currentStatu 当前状态
 * @param toNewStatu 删除状态
 */
function del_article_tips(me, articleId, currentStatu, toNewStatu) {
    if (toNewStatu == "3") {
        MrcodeUi.Alert.popLayer.popYNTitleCenter("要把该文章删除吗？",
            "1. 本操作可恢复,如需彻底删除，请前往回收站删除该文章~<br/>" +
            "2. 本文章所有的排行榜将会被取消，比如：首页的排行展示<br/>",
            '取消', '确定', function () {
                delArticle(me, articleId, currentStatu, toNewStatu, null);
                return true;
            });
    } else if (toNewStatu == "-1") {
        MrcodeUi.Alert.popLayer.popYNTitleCenter("要把该文章彻底删除吗？",
            "1. 本操作不可恢复~<br/>" +
            "2. 本文章所有相关信息将被彻底删除<br/>" +
            "望大侠三思而后行",
            '取消', '我想好了', function () {
                delArticle(me, articleId, currentStatu, toNewStatu, null);
                return true;
            });
    }

}

function delArticle(me, articleId, currentStatu, toNewStatu, remark) {
    var $a = $(me);
    var pop = null;
    $(document).ajaxStart(function () {
        pop = MrcodeUi.Alert.popLayer.popLoading();
    });
    $(document).ajaxStop(function () {
        pop.close();
    });
    $.ajax({
        url: '/auth/article/delete/' + articleId + "/" + currentStatu + "/" + toNewStatu,
        type: 'DELETE',
        dataType: 'json',
        data: {
            remark: remark
        },
        success: function (result) {
            var code = result.code;
            if ("0" == code) {
                removeTableRow($a, currentStatu);
                MrcodeUi.Alert.sx.success(result.msg);
            } else {
                MrcodeUi.Alert.popLayer.popYCInfo(result.msg);
            }
        },
        error: function (XMLHttpRequest, errinfo, ex) {
            MrcodeUi.Alert.popLayer.popYCInfo("致命错误：请稍后重试");
        }
    });
}

/** 移除行，并刷新 */
function removeTableRow(me, currentStatu) {
    me.parent("td").parent("tr").remove();
    if ($("#postTab tr").length == 1) {
        window.location.href = "/auth/manage/postlist/" + currentStatu;
    }
}

/** 文章恢复 */
function recovery(me, articleId) {
    $a = $(me);
    MrcodeUi.Alert.popLayer.popYNTitleCenter("要把该文章恢复到正常状态吗？",
        "本操作 只会把文章状态从回收站更新到正常状态~", '取消', '确定', function () {
            req(me, articleId);
            return true;
        });
    function req(me, articleId) {
        $.ajax({
            url: '/auth/article/recovery/' + articleId,
            type: 'PUT',
            dataType: 'json',
            success: function (result) {
                var code = result.code;
                if ("0" == code) {
                    MrcodeUi.Alert.sx.success(result.msg);
                    removeTableRow($a, "3");
                } else {
                    MrcodeUi.Alert.popLayer.popYCInfo(result.msg);
                }
            },
            error: function (XMLHttpRequest, errinfo, ex) {
                MrcodeUi.Alert.popLayer.popYC("致命错误：请稍后重试");
            }
        });
    }
}

